package es.gesfutbol.domini.implementacio;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import es.gesfutbol.domini.IPenya;

@Entity
@Table (name="penya")
public class Penya implements IPenya {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8292961885708572417L;

	private Long idPenya;
	
	private String nom;

	private boolean directoriPenya;
	
	private Set<Percentatge> percentatges;
	
	private Set<Penyista> penyistes;
	
	private Set<CombinacioGeneral> combGenerals;
	
	private Set<CombinacioPropia> combPropies;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="idPenya", nullable=false, precision = 10, scale=0)
	public Long getIdPenya() {
		return idPenya;
	}

	public void setIdPenya(Long idPenya) {
		this.idPenya = idPenya;
	}

	@Column(name="nom", length=45, nullable=false)
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}
	
	@Column(name="directoriPenya",columnDefinition = "tinyint", nullable = false)
	public boolean isDirectoriPenya() {
		return directoriPenya;
	}

	public void setDirectoriPenya(boolean directoriPenya) {
		this.directoriPenya = directoriPenya;
	}

	@OneToMany(fetch=FetchType.LAZY, mappedBy="penya", cascade=CascadeType.ALL)
	public Set<Penyista> getPenyistes() {
		return penyistes;
	}

	public void setPenyistes(Set<Penyista> penyistes) {
		this.penyistes = penyistes;
	}
	
	@OneToMany(fetch=FetchType.LAZY, mappedBy="penya", cascade=CascadeType.ALL)
	public Set<Percentatge> getPercentatges() {
		return percentatges;
	}

	public void setPercentatges(Set<Percentatge> percentatges) {
		this.percentatges = percentatges;
	}

	@ManyToMany
	@JoinTable(name="combinacio_general_en_penya",
			joinColumns=@JoinColumn(name="idPenya", referencedColumnName="idPenya"),
			inverseJoinColumns=@JoinColumn(name="idCombGeneral", referencedColumnName="idCombGeneral"))
	public Set<CombinacioGeneral> getCombGenerals() {
		return combGenerals;
	}

	public void setCombGenerals(Set<CombinacioGeneral> combGenerals) {
		this.combGenerals = combGenerals;
		
	}

	@ManyToMany
	@JoinTable(name="combinacio_propia_en_penya",
			joinColumns=@JoinColumn(name="idPenya", referencedColumnName="idPenya"),
			inverseJoinColumns=@JoinColumn(name="idCombPropia", referencedColumnName="idCombPropia"))
	public Set<CombinacioPropia> getCombPropies() {
		return combPropies;
	}

	public void setCombPropies(Set<CombinacioPropia> combPropies) {
		this.combPropies = combPropies;		
	}
}
